#  引入合适的包
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-2, 2, 10)  # 生成在范围[-2,2]中10个点作为x轴的10个点

#  生成在范围[-2,2]中10个点作为y轴的10个点
#  然后把y轴  "竖起来"
y = np.linspace(-2, 2, 10).reshape(-1, 1)

#  按照向量域公式得到针对每一个点(x,y)的横坐标增量数组u1和纵坐标增量数组v1
#  可通过  np.sqrt(x)  计算x的平方根
u1 = -y / np.sqrt(x ** 2 + y ** 2)

v1 = x / np.sqrt(x ** 2 + y ** 2)

#  按照电场公式得到针对每一个点(x,y)的横坐标增量数组u2和纵坐标增量数组v2
u2 = (x + 1) / ((x + 1) ** 2 + y ** 2) - (x - 1) / ((x - 1) ** 2 + y ** 2)

v2 = y / ((x + 1) ** 2 + y ** 2) - y / ((x - 1) ** 2 + y ** 2)

#  把向量与和电场绘制出来
fg, ax = plt.subplots(1, 2, figsize=(15, 7))
ax[0].quiver(x, y, u1, v1)
ax[0].set_title("vector  field", size=20)

ax[1].streamplot(x, y, u2, v2)
#  画出电场的两极
ax[1].plot(-1, 0, 'or')
ax[1].plot(1, 0, 'ob')
ax[1].set_title("electric  field", size=20)

#  调整子图位置
#  并以最紧凑模式保存plt.show()对应显示内容到  out.png
plt.tight_layout()
plt.savefig('out.png', bbox_inches='tight')
plt.show()